Calendar software has become a common management tool in many office environments. Calendar software allows users to create and store items in a computer to keep track of an event, such as a meeting, an appointment, etc. An item, which consists of a discrete collection of information that represents an event, can include data that describes the event, data that identifies the time of the event, and other data that is related to the event. Items are typically stored in a database and accessed by users via a client-server application, such as a stand-alone client application, such as Outlook®, or a Web-based client-server system, such as SharePoint®. Among many other functions, existing calendar software allows users to set up a personal calendar having a large number of items, and view a list of their items via a graphical user interface. Typically, the graphical user interface allows users to organize their schedules, create new events, or perform a number of other tasks that involve manipulating items stored in a computing device.
Among many other functions, existing calendar software supports filtering of items that match a criteria. Filters allow users to search for items using criteria defined by the user and supported by the calendar software. Applying filters to items stored in a database is typically performed using the embedded functionality of the database. Without filters, the amount of data conveyed to a user may be excessive or unwieldy. For example, if a user is interested in items that are sporadically scheduled over a 13-month period of time, without a filter the user would have to view 13 months of items to locate the desired information.
Calendar software and other programs allow users to schedule and retrieve recurrence events and exceptions to recurrence events. A recurrence event is a plurality of events, such as meetings or appointments, that occur on a regular basis as defined by the recurrence pattern (i.e., daily, weekly, monthly, and yearly). An exception to a recurrence event is an event instance that differs in any way from the occurrence that would normally be created by the recurrence pattern. Recurrence events and exceptions to recurrence events are typically stored as items in a database and accessed with a client-server application in the same way as other items.
The process of filtering recurrence events and exceptions to recurrence events presents obstacles when a Web-based system is utilized. In a Web-based system, a user must download a database, or a portion thereof, from a server to a client in order to view items in the database. A data distribution schema must be established by the server as to how to deliver the items to the client over a network, such as the Internet.
In a Web-based system, one approach to storing recurrence events is to generate a record of each instance of the recurrence event as a discrete entry in the database. Because the recurrence event is expanded before being stored in the database, each instance of the recurrence event is made available to the embedded filtering functionality of the database. This approach has various problems. One problem is that programs typically support the storage of data (i.e., documents, e-mails, files, etc.) related to a record in a database. If a recurrence event is expanded into individual records, a copy of related data is duplicated and stored with each record. Obviously, this approach consumes an excessive amount of storage space. A similar problem with this approach is that multiple copies of related data are transmitted over a network when a record is retrieved from the database. This takes bandwidth and, thus, may slow data transmission. Users may be deterred from exploiting the benefits of a program if the program is slow due to excessive transmission latency.
Another approach to storing recurrence events is to generate a single record for all instances of the recurrence event for storage in one location in a database. Related data could be associated with the record without being duplicated in multiple locations, saving storage space and minimizing transmission latency between computing devices. After retrieval from the database, the recurrence event would be expanded into individual items, each linked to a copy of related data. A problem with this approach is that the embedded filtering functionality of the database may be limited when storing a recurrence event as a single record in a database.
Typically, programs that store and filter items utilize embedded functionality provided by the database. For example, some databases support Structured Query Languages (SQL) that allow programs to sort, organize, and filter data. If a recurrence event is stored in a single record, the ability to use the functionality provided by the database is restricted, i.e., using the database to filter between instances of a recurrence event is not possible because the instances are stored in the same record.
As will be readily understood from the foregoing discussion, there is a need for a system and method for filtering recurrence events stored in a database. More specifically, there exists a need for a system and method that enables storage of a recurrence event in a single record while allowing filtering of the recurrence event.